##Loading necessary packages and data
library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
method from
print.tbl_lazy
print.tbl_sql
── Attaching packages ──────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse 1.3.1 ──
✔ ggplot2 3.3.6 ✔ purrr 0.3.4
✔ tibble 3.1.7 ✔ dplyr 1.0.9
✔ tidyr 1.2.0 ✔ stringr 1.4.0
✔ readr 2.1.2 ✔ forcats 0.5.1
Warning: package ‘ggplot2’ was built under R version 4.2.1Warning: package ‘dplyr’ was built under R version 4.2.1── Conflicts ─────────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
library(janitor)
Warning: package ‘janitor’ was built under R version 4.2.1
Attaching package: ‘janitor’
The following objects are masked from ‘package:stats’:
chisq.test, fisher.test
library(lubridate)
Attaching package: ‘lubridate’
The following objects are masked from ‘package:base’:
date, intersect, setdiff, union
hb_agesex <- read_csv("../phs_scotland_group_project/raw_data/covid_raw_data/hospital_admissions_hb_agesex_20220302.csv") %>%
clean_names
Rows: 43516 Columns: 12── Column specification ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Delimiter: ","
chr (8): HB, HBQF, AgeGroup, AgeGroupQF, Sex, SexQF, AdmissionType, AdmissionTypeQF
dbl (4): WeekEnding, NumberAdmissions, Average20182019, PercentVariation
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
board_names <- read_csv("raw_data/covid_raw_data/health_board_names.csv") %>%
clean_names
Rows: 18 Columns: 5── Column specification ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Delimiter: ","
chr (3): HB, HBName, Country
dbl (2): HBDateEnacted, HBDateArchived
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
#data exploration
hb_agesex
board_names
hb_agesex <- left_join(hb_agesex, board_names, by = "hb")
hb_agesex <- hb_agesex %>%
select(week_ending, hb, hbqf, age_group, age_group_qf, sex, sex_qf, admission_type, admission_type_qf, number_admissions, average20182019, percent_variation, hb_name.x)
Error in `select()`:
! Can't subset columns that don't exist.
✖ Column `hb_name.x` doesn't exist.
Backtrace:
1. hb_agesex %>% ...
3. dplyr:::select.data.frame(...)
6. tidyselect::eval_select(expr(c(...)), .data)
7. tidyselect:::eval_select_impl(...)
16. tidyselect:::vars_select_eval(...)
...
19. tidyselect:::reduce_sels(node, data_mask, context_mask, init = init)
20. tidyselect:::walk_data_tree(new, data_mask, context_mask)
21. tidyselect:::as_indices_sel_impl(...)
22. tidyselect:::as_indices_impl(x, vars, call = call, strict = strict)
23. tidyselect:::chr_as_locations(x, vars, call = call)
##the data is relatively organised, let’s start creating some
plots
##demographic investigation
hb_simd <- read_csv("raw_data/covid_raw_data/hospital_admissions_hb_simd_20220302.csv") %>%
clean_names()
Rows: 21138 Columns: 9── Column specification ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Delimiter: ","
chr (4): HB, HBQF, AdmissionType, AdmissionTypeQF
dbl (5): WeekEnding, SIMDQuintile, NumberAdmissions, Average20182019, PercentVariation
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
hb_simd
hb_simd <- left_join(hb_simd, board_names, by = "hb")
hb_simd <- hb_simd %>%
select(week_ending, hb, hbqf, simd_quintile, admission_type, admission_type_qf, number_admissions, average20182019, percent_variation, hb_name)
hb_simd
hb_simd <- hb_simd %>%
mutate(hb_name = if_else(
is.na(hb_name),
"Scotland",
hb_name
))
hb_simd <- hb_simd %>%
mutate(week_ending = ymd(week_ending))
hb_simd <- hb_simd %>%
mutate(month = month(week_ending, label = TRUE),
year = year(week_ending))
hb_simd
hb_simd %>%
distinct(simd_quintile)
hb_simd %>%
filter(year == "2020",
hb_name == "Scotland",
admission_type == "Emergency") %>%
ggplot(aes(x = simd_quintile, y = number_admissions))+
geom_col()

hb_simd %>%
filter(admission_type == "Emergency")%>%
group_by(hb_name, week_ending, simd_quintile) %>%
summarise(mean_admissions = mean(number_admissions),
mean_20182019_admissions = mean(average20182019)) %>%
ggplot() +
geom_line(aes(x = week_ending,
y = mean_admissions), group = 1, colour = "red") +
geom_line(aes(x = week_ending,
y = mean_20182019_admissions), group = 1, colour = "blue") +
scale_x_date(date_breaks = "3 months", date_labels = "%b %Y") +
theme(axis.text.x = element_text(angle = 90, hjust = 1, size =7)) +
geom_vline(xintercept = as.numeric(as.Date("2020-01-01")), linetype=4)+
geom_vline(xintercept = as.numeric(as.Date("2021-01-01")), linetype=4)+
geom_vline(xintercept = as.numeric(as.Date("2022-01-01")), linetype=4)+
facet_wrap(~hb_name, scales = "free_y") +
labs(x = "Date",
y = "Mean admissions per week",
colour = "Covid vs Pre-Covid")
`summarise()` has grouped output by 'hb_name', 'week_ending'. You can override using the `.groups` argument.

hb_simd %>%
filter(admission_type == "Emergency",
simd_quintile == "1",
year == "2022")%>%
group_by(hb_name, week_ending, simd_quintile, year) %>%
summarise(mean_admissions = mean(number_admissions),
mean_20182019_admissions = mean(average20182019)) %>%
ggplot(aes(x = week_ending, y = mean_admissions))+
geom_col()
`summarise()` has grouped output by 'hb_name', 'week_ending', 'simd_quintile'. You can override using the `.groups` argument.

hb_simd
hb_simd %>%
filter(admission_type == "Emergency",
simd_quintile == "1")%>%
group_by(hb_name, week_ending, simd_quintile) %>%
summarise(mean_admissions = mean(number_admissions),
mean_20182019_admissions = mean(average20182019)) %>%
ggplot(aes(x = week_ending, y = mean_20182019_admissions))+
geom_col()
`summarise()` has grouped output by 'hb_name', 'week_ending'. You can override using the `.groups` argument.

#simd 1 2020
hb_simd %>%
filter(admission_type == "Emergency",
simd_quintile == "1",
year == "2020",
hb_name == "NHS Lothian")%>%
group_by(hb_name, week_ending, simd_quintile) %>%
summarise(mean_admissions = mean(number_admissions),
mean_20182019_admissions = mean(average20182019)) %>%
ggplot(aes(x = week_ending, y = mean_admissions, colour = simd_quintile))+
geom_line()+
scale_x_date(date_breaks = "3 months", date_labels = "%b %Y")
`summarise()` has grouped output by 'hb_name', 'week_ending'. You can override using the `.groups` argument.

hb_simd$simd_quintile <- factor(hb_simd$simd_quintile, levels = c("1", "2", "3", "4", "5"))
hb_simd
#simd 5
hb_simd %>%
filter(admission_type == "Emergency")%>%
group_by(hb_name, week_ending, simd_quintile) %>%
summarise(mean_admissions = mean(number_admissions),
mean_20182019_admissions = mean(average20182019)) %>%
ggplot(aes(x = week_ending, y = mean_20182019_admissions, colour = simd_quintile))+
geom_line()+
scale_x_date(date_breaks = "3 months", date_labels = "%b %Y")
`summarise()` has grouped output by 'hb_name', 'week_ending'. You can override using the `.groups` argument.

hb_simd %>%
filter(admission_type == "Emergency",
hb_name == "Scotland") %>%
group_by(hb_name, week_ending, simd_quintile) %>%
summarise(mean_admissions = mean(number_admissions)) %>%
ggplot()+
geom_line(aes(x = week_ending, y = mean_admissions, colour = simd_quintile))+
scale_x_date(date_breaks = "3 months", date_labels = "%b %Y")
`summarise()` has grouped output by 'hb_name', 'week_ending'. You can override using the `.groups` argument.

hb_simd %>%
filter(admission_type == "Emergency") %>%
leaflet() %>%
addTiles() %>%
addCircleMarkers(lng = -4.975,
lat = 55.445,
color = "blue",
popup="Ayrshire and Arran",
radius = sqrt(98202/ 10), weight = 1) %>%
addCircleMarkers(lng = -2.83333000,
lat = 55.58333000,
color = "blue",
popup="Borders",
radius = sqrt(20656/ 10), weight = 1) %>%
addCircleMarkers(lng = -3.857784,
lat = 54.988285,
color = "blue",
popup="Dumfries and Galloway",
radius = sqrt(33981/ 10), weight = 1) %>%
addCircleMarkers(lng = -3.78535,
lat = 56.0021,
color = "blue",
popup="Forth Valley",
radius = sqrt(64750/ 10), weight = 1) %>%
addCircleMarkers(lng = -2.988,
lat = 57.228,
color = "blue",
popup="Grampian",
radius = sqrt(108032/ 10), weight = 1) %>%
addCircleMarkers(lng = -4.71,
lat = 57.12,
color = "blue",
popup="Highland",
radius = sqrt(60411/ 10), weight = 1) %>%
addCircleMarkers(lng = -3.083999664,
lat = 55.905496378,
color = "blue",
popup="Lothian",
radius = sqrt(185589 / 10), weight = 1) %>%
addCircleMarkers(lng = -3.0,
lat = 59.0,
color = "blue",
popup="Orkney",
radius = sqrt(3375/ 10), weight = 1) %>%
addCircleMarkers(lng = -1.2689,
lat = 60.3038,
color = "blue",
popup="Shetland",
radius = sqrt(3248/ 10), weight = 1) %>%
addCircleMarkers(lng = -7.02,
lat = 57.76,
color = "blue",
popup="Western Isles",
radius = sqrt(5398/ 10), weight = 1) %>%
addCircleMarkers(lng = -3.1999992,
lat = 56.249999,
color = "blue",
popup="Fife",
radius = sqrt(84101/ 10), weight = 1) %>%
addCircleMarkers(lng = -3.7333304,
lat = 56.6999972,
color = "blue",
popup="Tayside",
radius = sqrt(104225/ 10), weight = 1) %>%
addCircleMarkers(lng = -4.4057,
lat = 55.90137,
color = "blue",
popup="Greater Glasgow and Clyde",
radius = sqrt(273189 / 10), weight = 1) %>%
addCircleMarkers(lng = -3.83333,
lat = 55.583331,
color = "blue",
popup="Lanarkshire",
radius = sqrt(143644 / 10), weight = 1)
NA
hb_simd$simd_quintile <- factor(hb_simd$simd_quintile, levels = c("1", "2", "3", "4", "5"))
hb_simd
library(plotly)
Warning: package ‘plotly’ was built under R version 4.2.1Registered S3 method overwritten by 'data.table':
method from
print.data.table
Registered S3 methods overwritten by 'htmltools':
method from
print.html tools:rstudio
print.shiny.tag tools:rstudio
print.shiny.tag.list tools:rstudio
Registered S3 method overwritten by 'htmlwidgets':
method from
print.htmlwidget tools:rstudio
Attaching package: ‘plotly’
The following object is masked from ‘package:ggplot2’:
last_plot
The following object is masked from ‘package:stats’:
filter
The following object is masked from ‘package:graphics’:
layout
library(plotly)
hb_simd$simd_quintile <- factor(hb_simd$simd_quintile, levels = c("1", "2", "3", "4", "5"))
hb_simd
#mean admissions per SIMD from 2020 to 2022
p2 <- hb_simd %>%
filter(admission_type == "Emergency",
# hb_name reactive
hb_name == "Scotland")%>%
group_by(hb_name, week_ending, simd_quintile, year) %>%
summarise(mean_admissions = mean(number_admissions),
mean_20182019_admissions = mean(average20182019)) %>%
ggplot()+
geom_point(aes(x = week_ending,
y = mean_admissions, colour = simd_quintile,
text = paste0("Date: ", week_ending,
"<br>",
"Mean admissions: ",
round(mean_admissions, digits = 2),
"<br>",
"2018-2019 mean admissions: ",
round(mean_20182019_admissions, digits = 2)))) +
geom_line(aes(x = week_ending,
y = mean_admissions,
colour = simd_quintile,
group = simd_quintile)) +
scale_x_date(date_breaks = "3 months", date_labels = "%b %Y") +
scale_y_sqrt() +
theme(axis.text.x = element_text(angle = 90, hjust = 1, size =7)) +
geom_vline(xintercept = as.numeric(as.Date("2020-01-01")), linetype=4, colour = "grey50")+
geom_vline(xintercept = as.numeric(as.Date("2021-01-01")), linetype=4, colour = "grey50")+
geom_vline(xintercept = as.numeric(as.Date("2022-01-01")), linetype=4, colour = "grey50")+
labs(title = "Mean admissions per SIMD \n",
x = "Date",
y = "Mean admissions",
colour = "SIMD")
`summarise()` has grouped output by 'hb_name', 'week_ending', 'simd_quintile'. You can override using the `.groups` argument.Warning: Ignoring unknown aesthetics: text
p2 %>%
ggplotly(tooltip = "text") %>%
config(displayModeBar = FALSE)
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojI0xvYWRpbmcgbmVjZXNzYXJ5IHBhY2thZ2VzIGFuZCBkYXRhDQoNCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGphbml0b3IpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCg0KaGJfYWdlc2V4IDwtIHJlYWRfY3N2KCIuLi9waHNfc2NvdGxhbmRfZ3JvdXBfcHJvamVjdC9yYXdfZGF0YS9jb3ZpZF9yYXdfZGF0YS9ob3NwaXRhbF9hZG1pc3Npb25zX2hiX2FnZXNleF8yMDIyMDMwMi5jc3YiKSAlPiUgDQogIGNsZWFuX25hbWVzDQpib2FyZF9uYW1lcyA8LSByZWFkX2NzdigicmF3X2RhdGEvY292aWRfcmF3X2RhdGEvaGVhbHRoX2JvYXJkX25hbWVzLmNzdiIpICU+JSANCiAgY2xlYW5fbmFtZXMNCmBgYA0KDQojZGF0YSBleHBsb3JhdGlvbiANCg0KYGBge3J9DQpoYl9hZ2VzZXgNCmJvYXJkX25hbWVzDQpgYGANCg0KDQoNCg0KYGBge3J9DQpoYl9hZ2VzZXggPC0gbGVmdF9qb2luKGhiX2FnZXNleCwgYm9hcmRfbmFtZXMsIGJ5ID0gImhiIikNCg0KaGJfYWdlc2V4IDwtIGhiX2FnZXNleCAlPiUgDQogIHNlbGVjdCh3ZWVrX2VuZGluZywgaGIsIGhicWYsIGFnZV9ncm91cCwgYWdlX2dyb3VwX3FmLCBzZXgsIHNleF9xZiwgYWRtaXNzaW9uX3R5cGUsIGFkbWlzc2lvbl90eXBlX3FmLCBudW1iZXJfYWRtaXNzaW9ucywgYXZlcmFnZTIwMTgyMDE5LCBwZXJjZW50X3ZhcmlhdGlvbiwgaGJfbmFtZS54KSANCiANCg0KaGJfYWdlc2V4IDwtIGhiX2FnZXNleCAlPiUgDQogIHJlbmFtZShoYl9uYW1lID0gaGJfbmFtZS54KQ0KaGJfYWdlc2V4DQoNCmhiX2FnZXNleCA8LSBoYl9hZ2VzZXggJT4lIA0KICBtdXRhdGUoaGJfbmFtZSA9IGlmX2Vsc2UoDQogICAgaXMubmEoaGJfbmFtZSksDQogICAgIlNjb3RsYW5kIiwNCiAgICBoYl9uYW1lDQogICkpDQpgYGANCg0KDQoNCmBgYHtyfQ0KaGJfYWdlc2V4IDwtaGJfYWdlc2V4ICU+JQ0KICBtdXRhdGUod2Vla19lbmRpbmcgPSB5bWQod2Vla19lbmRpbmcpKQ0KDQoNCmBgYA0KDQpgYGB7cn0NCmhiX2FnZXNleCA8LSBoYl9hZ2VzZXggJT4lIA0KICBtdXRhdGUobW9udGggPSBtb250aCh3ZWVrX2VuZGluZywgbGFiZWwgPSBUUlVFKSwNCiAgICAgICAgIHllYXIgPSB5ZWFyKHdlZWtfZW5kaW5nKSkNCmhiX2FnZXNleA0KYGBgDQojI3RoZSBkYXRhIGlzIHJlbGF0aXZlbHkgb3JnYW5pc2VkLCBsZXQncyBzdGFydCBjcmVhdGluZyBzb21lIHBsb3RzDQpgYGB7cn0NCmhiX2FnZXNleCAlPiUgDQogIGZpbHRlcih5ZWFyID09ICIyMDIwIiwgDQogICAgICAgICBhZG1pc3Npb25fdHlwZSAgPT0gIkVtZXJnZW5jeSIsIA0KICAgICAgICAgaGJfbmFtZSA9PSAiU2NvdGxhbmQiKSAlPiUgDQpnZ3Bsb3QoYWVzKHggPSBtb250aCwgeSA9IG51bWJlcl9hZG1pc3Npb25zKSkrDQogIGdlb21fY29sKGZpbGwgPSAibGlnaHQgYmx1ZSIpDQoNCmhiX2FnZXNleCAlPiUgDQogIGZpbHRlcih5ZWFyID09ICIyMDIxIiwgDQogICAgICAgICBhZG1pc3Npb25fdHlwZSAgPT0gIkVtZXJnZW5jeSIsIA0KICAgICAgICAgaGJfbmFtZSA9PSAiU2NvdGxhbmQiKSAlPiUgDQpnZ3Bsb3QoYWVzKHggPSBtb250aCwgeSA9IG51bWJlcl9hZG1pc3Npb25zKSkrDQogIGdlb21fY29sKGZpbGwgPSAibGlnaHQgYmx1ZSIpDQoNCmhiX2FnZXNleCAlPiUgDQogIGZpbHRlcih5ZWFyID09ICIyMDIyIiwgDQogICAgICAgICBhZG1pc3Npb25fdHlwZSAgPT0gIkVtZXJnZW5jeSIsIA0KICAgICAgICAgaGJfbmFtZSA9PSAiU2NvdGxhbmQiKSAlPiUgDQpnZ3Bsb3QoYWVzKHggPSBtb250aCwgeSA9IG51bWJlcl9hZG1pc3Npb25zKSkrDQogIGdlb21fY29sKGZpbGwgPSAibGlnaHQgYmx1ZSIpDQpgYGANCg0KDQojI2RlbW9ncmFwaGljIGludmVzdGlnYXRpb24gDQoNCmBgYHtyfQ0KaGJfc2ltZCA8LSByZWFkX2NzdigicmF3X2RhdGEvY292aWRfcmF3X2RhdGEvaG9zcGl0YWxfYWRtaXNzaW9uc19oYl9zaW1kXzIwMjIwMzAyLmNzdiIpICU+JSANCiAgY2xlYW5fbmFtZXMoKQ0KaGJfc2ltZA0KYGBgDQoNCmBgYHtyfQ0KaGJfc2ltZCA8LSBsZWZ0X2pvaW4oaGJfc2ltZCwgYm9hcmRfbmFtZXMsIGJ5ID0gImhiIikNCg0KaGJfc2ltZCA8LSBoYl9zaW1kICU+JSANCiAgc2VsZWN0KHdlZWtfZW5kaW5nLCBoYiwgaGJxZiwgc2ltZF9xdWludGlsZSwgYWRtaXNzaW9uX3R5cGUsIGFkbWlzc2lvbl90eXBlX3FmLCBudW1iZXJfYWRtaXNzaW9ucywgYXZlcmFnZTIwMTgyMDE5LCBwZXJjZW50X3ZhcmlhdGlvbiwgaGJfbmFtZSkgDQogaGJfc2ltZA0KDQoNCg0KaGJfc2ltZCA8LSBoYl9zaW1kICU+JSANCiAgbXV0YXRlKGhiX25hbWUgPSBpZl9lbHNlKA0KICAgIGlzLm5hKGhiX25hbWUpLA0KICAgICJTY290bGFuZCIsDQogICAgaGJfbmFtZQ0KICApKQ0KYGBgDQoNCmBgYHtyfQ0KaGJfc2ltZCA8LSBoYl9zaW1kICU+JQ0KICBtdXRhdGUod2Vla19lbmRpbmcgPSB5bWQod2Vla19lbmRpbmcpKQ0KDQpoYl9zaW1kIDwtIGhiX3NpbWQgJT4lIA0KICBtdXRhdGUobW9udGggPSBtb250aCh3ZWVrX2VuZGluZywgbGFiZWwgPSBUUlVFKSwNCiAgICAgICAgIHllYXIgPSB5ZWFyKHdlZWtfZW5kaW5nKSkNCmhiX3NpbWQNCmBgYA0KDQoNCmBgYHtyfQ0KaGJfc2ltZCAlPiUgDQogIGRpc3RpbmN0KHNpbWRfcXVpbnRpbGUpDQpgYGANCg0KYGBge3J9DQpoYl9zaW1kICU+JSANCiAgZmlsdGVyKHllYXIgPT0gIjIwMjAiLCANCiAgICAgICAgIGhiX25hbWUgPT0gIlNjb3RsYW5kIiwgDQogICAgICAgICBhZG1pc3Npb25fdHlwZSA9PSAiRW1lcmdlbmN5IikgJT4lIA0KZ2dwbG90KGFlcyh4ID0gc2ltZF9xdWludGlsZSwgeSA9IG51bWJlcl9hZG1pc3Npb25zKSkrDQogIGdlb21fY29sKCkNCmBgYA0KDQoNCmBgYHtyfQ0KaGJfc2ltZCAlPiUgDQogICBmaWx0ZXIoYWRtaXNzaW9uX3R5cGUgPT0gIkVtZXJnZW5jeSIpJT4lIA0KICBncm91cF9ieShoYl9uYW1lLCB3ZWVrX2VuZGluZywgc2ltZF9xdWludGlsZSkgJT4lIA0KICBzdW1tYXJpc2UobWVhbl9hZG1pc3Npb25zID0gbWVhbihudW1iZXJfYWRtaXNzaW9ucyksDQogICAgICAgICAgICBtZWFuXzIwMTgyMDE5X2FkbWlzc2lvbnMgPSBtZWFuKGF2ZXJhZ2UyMDE4MjAxOSkpICU+JSANCiAgIA0KICBnZ3Bsb3QoKSArDQogICAgZ2VvbV9saW5lKGFlcyh4ID0gd2Vla19lbmRpbmcsDQogICAgICAgICAgICAgICAgICB5ID0gbWVhbl9hZG1pc3Npb25zKSwgZ3JvdXAgPSAxLCBjb2xvdXIgPSAicmVkIikgKw0KICBnZW9tX2xpbmUoYWVzKHggPSB3ZWVrX2VuZGluZywNCiAgICAgICAgICAgICAgICB5ID0gbWVhbl8yMDE4MjAxOV9hZG1pc3Npb25zKSwgZ3JvdXAgPSAxLCBjb2xvdXIgPSAiYmx1ZSIpICsNCiAgc2NhbGVfeF9kYXRlKGRhdGVfYnJlYWtzID0gIjMgbW9udGhzIiwgZGF0ZV9sYWJlbHMgPSAiJWIgJVkiKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgc2l6ZSA9NykpICsNCiAgIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IGFzLm51bWVyaWMoYXMuRGF0ZSgiMjAyMC0wMS0wMSIpKSwgbGluZXR5cGU9NCkrDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IGFzLm51bWVyaWMoYXMuRGF0ZSgiMjAyMS0wMS0wMSIpKSwgbGluZXR5cGU9NCkrDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IGFzLm51bWVyaWMoYXMuRGF0ZSgiMjAyMi0wMS0wMSIpKSwgbGluZXR5cGU9NCkrDQogIGZhY2V0X3dyYXAofmhiX25hbWUsIHNjYWxlcyA9ICJmcmVlX3kiKSArIA0KICBsYWJzKHggPSAiRGF0ZSIsDQogICAgICAgeSA9ICJNZWFuIGFkbWlzc2lvbnMgcGVyIHdlZWsiLA0KICAgICAgIGNvbG91ciA9ICJDb3ZpZCB2cyBQcmUtQ292aWQiKQ0KDQpgYGANCg0KYGBge3J9DQpoYl9zaW1kICU+JSANCiAgIGZpbHRlcihhZG1pc3Npb25fdHlwZSA9PSAiRW1lcmdlbmN5IiwgDQogICAgICAgICAgc2ltZF9xdWludGlsZSA9PSAiMSIsDQogICAgICAgICAgeWVhciA9PSAiMjAyMiIpJT4lIA0KICBncm91cF9ieShoYl9uYW1lLCB3ZWVrX2VuZGluZywgc2ltZF9xdWludGlsZSwgeWVhcikgJT4lIA0KICBzdW1tYXJpc2UobWVhbl9hZG1pc3Npb25zID0gbWVhbihudW1iZXJfYWRtaXNzaW9ucyksDQogICAgICAgICAgICBtZWFuXzIwMTgyMDE5X2FkbWlzc2lvbnMgPSBtZWFuKGF2ZXJhZ2UyMDE4MjAxOSkpICU+JSANCiAgDQogIGdncGxvdChhZXMoeCA9IHdlZWtfZW5kaW5nLCB5ID0gbWVhbl9hZG1pc3Npb25zKSkrDQogIGdlb21fY29sKCkNCmBgYA0KDQpgYGB7cn0NCmhiX3NpbWQNCmBgYA0KDQpgYGB7cn0NCmhiX3NpbWQgJT4lIA0KICAgZmlsdGVyKGFkbWlzc2lvbl90eXBlID09ICJFbWVyZ2VuY3kiLCANCiAgICAgICAgICBzaW1kX3F1aW50aWxlID09ICIxIiklPiUgDQogIGdyb3VwX2J5KGhiX25hbWUsIHdlZWtfZW5kaW5nLCBzaW1kX3F1aW50aWxlKSAlPiUgDQogIHN1bW1hcmlzZShtZWFuX2FkbWlzc2lvbnMgPSBtZWFuKG51bWJlcl9hZG1pc3Npb25zKSwNCiAgICAgICAgICAgIG1lYW5fMjAxODIwMTlfYWRtaXNzaW9ucyA9IG1lYW4oYXZlcmFnZTIwMTgyMDE5KSkgJT4lIA0KICANCiAgZ2dwbG90KGFlcyh4ID0gd2Vla19lbmRpbmcsIHkgPSBtZWFuXzIwMTgyMDE5X2FkbWlzc2lvbnMpKSsNCiAgZ2VvbV9jb2woKQ0KYGBgDQoNCmBgYHtyfQ0KI3NpbWQgMSAyMDIwDQpoYl9zaW1kICU+JSANCiAgIGZpbHRlcihhZG1pc3Npb25fdHlwZSA9PSAiRW1lcmdlbmN5IiwgDQogICAgICAgICAgc2ltZF9xdWludGlsZSA9PSAiMSIsIA0KICAgICAgICAgIHllYXIgPT0gIjIwMjAiLCANCiAgICAgICAgICBoYl9uYW1lID09ICJOSFMgTG90aGlhbiIpJT4lIA0KICBncm91cF9ieShoYl9uYW1lLCB3ZWVrX2VuZGluZywgc2ltZF9xdWludGlsZSkgJT4lIA0KICBzdW1tYXJpc2UobWVhbl9hZG1pc3Npb25zID0gbWVhbihudW1iZXJfYWRtaXNzaW9ucyksDQogICAgICAgICAgICBtZWFuXzIwMTgyMDE5X2FkbWlzc2lvbnMgPSBtZWFuKGF2ZXJhZ2UyMDE4MjAxOSkpICU+JSANCiAgDQogIGdncGxvdChhZXMoeCA9IHdlZWtfZW5kaW5nLCB5ID0gbWVhbl9hZG1pc3Npb25zLCBjb2xvdXIgPSBzaW1kX3F1aW50aWxlKSkrDQogIGdlb21fbGluZSgpKw0KICAgc2NhbGVfeF9kYXRlKGRhdGVfYnJlYWtzID0gIjMgbW9udGhzIiwgZGF0ZV9sYWJlbHMgPSAiJWIgJVkiKSANCmBgYA0KDQoNCg0KYGBge3J9DQpoYl9zaW1kJHNpbWRfcXVpbnRpbGUgPC0gZmFjdG9yKGhiX3NpbWQkc2ltZF9xdWludGlsZSwgbGV2ZWxzID0gYygiMSIsICIyIiwgIjMiLCAiNCIsICI1IikpDQpoYl9zaW1kDQojc2ltZCA1DQpoYl9zaW1kICU+JSANCiAgIGZpbHRlcihhZG1pc3Npb25fdHlwZSA9PSAiRW1lcmdlbmN5Ig0KICAgICAgICAgICNzDQogICAgICAgICAgKSU+JSANCiAgZ3JvdXBfYnkoaGJfbmFtZSwgd2Vla19lbmRpbmcsIHNpbWRfcXVpbnRpbGUpICU+JSANCiAgc3VtbWFyaXNlKG1lYW5fYWRtaXNzaW9ucyA9IG1lYW4obnVtYmVyX2FkbWlzc2lvbnMpLA0KICAgICAgICAgICAgbWVhbl8yMDE4MjAxOV9hZG1pc3Npb25zID0gbWVhbihhdmVyYWdlMjAxODIwMTkpKSAlPiUgDQogIA0KICBnZ3Bsb3QoYWVzKHggPSB3ZWVrX2VuZGluZywgeSA9IG1lYW5fMjAxODIwMTlfYWRtaXNzaW9ucywgY29sb3VyID0gc2ltZF9xdWludGlsZSkpKw0KICBnZW9tX2xpbmUoKSsNCiAgIHNjYWxlX3hfZGF0ZShkYXRlX2JyZWFrcyA9ICIzIG1vbnRocyIsIGRhdGVfbGFiZWxzID0gIiViICVZIikgDQoNCmhiX3NpbWQgJT4lIA0KICAgZmlsdGVyKGFkbWlzc2lvbl90eXBlID09ICJFbWVyZ2VuY3kiLCANCiAgICAgICAgICBoYl9uYW1lID09ICJTY290bGFuZCIpICU+JSANCiAgZ3JvdXBfYnkoaGJfbmFtZSwgd2Vla19lbmRpbmcsIHNpbWRfcXVpbnRpbGUpICU+JSANCiAgc3VtbWFyaXNlKG1lYW5fYWRtaXNzaW9ucyA9IG1lYW4obnVtYmVyX2FkbWlzc2lvbnMpKSAlPiUgDQogIGdncGxvdCgpKw0KICBnZW9tX2xpbmUoYWVzKHggPSB3ZWVrX2VuZGluZywgeSA9IG1lYW5fYWRtaXNzaW9ucywgY29sb3VyID0gc2ltZF9xdWludGlsZSkpKw0KICAgc2NhbGVfeF9kYXRlKGRhdGVfYnJlYWtzID0gIjMgbW9udGhzIiwgZGF0ZV9sYWJlbHMgPSAiJWIgJVkiKSANCmBgYA0KDQoNCg0KYGBge3J9DQpoYl9zaW1kICU+JSANCiAgZmlsdGVyKGFkbWlzc2lvbl90eXBlID09ICJFbWVyZ2VuY3kiLCANCiAgICAgICAgIGhiX25hbWUgPT0gIk5IUyBBeXJzaGlyZSBhbmQgQXJyYW4iKSAlPiUgDQogIHN1bW1hcmlzZShzdW0obnVtYmVyX2FkbWlzc2lvbnMpKQ0KDQpoYl9zaW1kICU+JSANCiAgZmlsdGVyKGFkbWlzc2lvbl90eXBlID09ICJFbWVyZ2VuY3kiLCANCiAgICAgICAgIGhiX25hbWUgPT0gIk5IUyBCb3JkZXJzIikgJT4lIA0KICBzdW1tYXJpc2Uoc3VtKG51bWJlcl9hZG1pc3Npb25zKSkNCg0KaGJfc2ltZCAlPiUgDQogIGZpbHRlcihhZG1pc3Npb25fdHlwZSA9PSAiRW1lcmdlbmN5IiwgDQogICAgICAgICBoYl9uYW1lID09ICJOSFMgRHVtZnJpZXMgYW5kIEdhbGxvd2F5IikgJT4lIA0KICBzdW1tYXJpc2Uoc3VtKG51bWJlcl9hZG1pc3Npb25zKSkNCg0KaGJfc2ltZCAlPiUgDQogIGZpbHRlcihhZG1pc3Npb25fdHlwZSA9PSAiRW1lcmdlbmN5IiwgDQogICAgICAgICBoYl9uYW1lID09ICJOSFMgRm9ydGggVmFsbGV5IikgJT4lIA0KICBzdW1tYXJpc2Uoc3VtKG51bWJlcl9hZG1pc3Npb25zKSkNCg0KaGJfc2ltZCAlPiUgDQogIGZpbHRlcihhZG1pc3Npb25fdHlwZSA9PSAiRW1lcmdlbmN5IiwgDQogICAgICAgICBoYl9uYW1lID09ICJOSFMgR3JhbXBpYW4iKSAlPiUgDQogIHN1bW1hcmlzZShzdW0obnVtYmVyX2FkbWlzc2lvbnMpKQ0KDQpoYl9zaW1kICU+JSANCiAgZmlsdGVyKGFkbWlzc2lvbl90eXBlID09ICJFbWVyZ2VuY3kiLCANCiAgICAgICAgIGhiX25hbWUgPT0gIk5IUyBIaWdobGFuZCIpICU+JSANCiAgc3VtbWFyaXNlKHN1bShudW1iZXJfYWRtaXNzaW9ucykpDQoNCmhiX3NpbWQgJT4lIA0KICBmaWx0ZXIoYWRtaXNzaW9uX3R5cGUgPT0gIkVtZXJnZW5jeSIsIA0KICAgICAgICAgaGJfbmFtZSA9PSAiTkhTIExvdGhpYW4iKSAlPiUgDQogIHN1bW1hcmlzZShzdW0obnVtYmVyX2FkbWlzc2lvbnMpKQ0KDQpoYl9zaW1kICU+JSANCiAgZmlsdGVyKGFkbWlzc2lvbl90eXBlID09ICJFbWVyZ2VuY3kiLCANCiAgICAgICAgIGhiX25hbWUgPT0gIk5IUyBPcmtuZXkiKSAlPiUgDQogIHN1bW1hcmlzZShzdW0obnVtYmVyX2FkbWlzc2lvbnMpKQ0KDQpoYl9zaW1kICU+JSANCiAgZmlsdGVyKGFkbWlzc2lvbl90eXBlID09ICJFbWVyZ2VuY3kiLCANCiAgICAgICAgIGhiX25hbWUgPT0gIk5IUyBTaGV0bGFuZCIpICU+JSANCiAgc3VtbWFyaXNlKHN1bShudW1iZXJfYWRtaXNzaW9ucykpDQoNCmhiX3NpbWQgJT4lIA0KICBmaWx0ZXIoYWRtaXNzaW9uX3R5cGUgPT0gIkVtZXJnZW5jeSIsIA0KICAgICAgICAgaGJfbmFtZSA9PSAiTkhTIFdlc3Rlcm4gSXNsZXMiKSAlPiUgDQogIHN1bW1hcmlzZShzdW0obnVtYmVyX2FkbWlzc2lvbnMpKQ0KDQoNCmhiX3NpbWQgJT4lIA0KICBmaWx0ZXIoYWRtaXNzaW9uX3R5cGUgPT0gIkVtZXJnZW5jeSIsIA0KICAgICAgICAgaGJfbmFtZSA9PSAiTkhTIEZpZmUiKSAlPiUgDQogIHN1bW1hcmlzZShzdW0obnVtYmVyX2FkbWlzc2lvbnMpKQ0KDQoNCmhiX3NpbWQgJT4lIA0KICBmaWx0ZXIoYWRtaXNzaW9uX3R5cGUgPT0gIkVtZXJnZW5jeSIsIA0KICAgICAgICAgaGJfbmFtZSA9PSAiTkhTIFRheXNpZGUiKSAlPiUgDQogIHN1bW1hcmlzZShzdW0obnVtYmVyX2FkbWlzc2lvbnMpKQ0KDQpoYl9zaW1kICU+JSANCiAgZmlsdGVyKGFkbWlzc2lvbl90eXBlID09ICJFbWVyZ2VuY3kiLCANCiAgICAgICAgIGhiX25hbWUgPT0gIk5IUyBHcmVhdGVyIEdsYXNnb3cgYW5kIENseWRlIikgJT4lIA0KICBzdW1tYXJpc2Uoc3VtKG51bWJlcl9hZG1pc3Npb25zKSkNCg0KaGJfc2ltZCAlPiUgDQogIGZpbHRlcihhZG1pc3Npb25fdHlwZSA9PSAiRW1lcmdlbmN5IiwgDQogICAgICAgICBoYl9uYW1lID09ICJOSFMgTGFuYXJrc2hpcmUiKSAlPiUgDQogIHN1bW1hcmlzZShzdW0obnVtYmVyX2FkbWlzc2lvbnMpKQ0KDQpgYGANCg0KYGBge3J9DQoNCmhiX3NpbWQgJT4lIA0KIGZpbHRlcihhZG1pc3Npb25fdHlwZSA9PSAiRW1lcmdlbmN5IikgJT4lIA0KDQogIA0KbGVhZmxldCgpICU+JSANCiAgYWRkVGlsZXMoKSAlPiUgDQogIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTQuOTc1LCANCiAgICAgICAgICAgICAgICAgICBsYXQgPSA1NS40NDUsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsdWUiLA0KICAgICAgICAgICAgICAgICAgIHBvcHVwPSJBeXJzaGlyZSBhbmQgQXJyYW4iLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoOTgyMDIvIDEwKSwgd2VpZ2h0ID0gMSkgJT4lIA0KICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0yLjgzMzMzMDAwLCANCiAgICAgICAgICAgICAgICAgICBsYXQgPSA1NS41ODMzMzAwMCwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmx1ZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkJvcmRlcnMiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoMjA2NTYvIDEwKSwgd2VpZ2h0ID0gMSkgJT4lIA0KICAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtMy44NTc3ODQsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU0Ljk4ODI4NSwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmx1ZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkR1bWZyaWVzIGFuZCBHYWxsb3dheSIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCgzMzk4MS8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0zLjc4NTM1LCANCiAgICAgICAgICAgICAgICAgICBsYXQgPSA1Ni4wMDIxLCANCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJibHVlIiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iRm9ydGggVmFsbGV5IiwNCiAgICAgICAgICAgICAgICAgICByYWRpdXMgPSBzcXJ0KDY0NzUwLyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTIuOTg4LCANCiAgICAgICAgICAgICAgICAgICBsYXQgPSA1Ny4yMjgsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsdWUiLA0KICAgICAgICAgICAgICAgICAgIHBvcHVwPSJHcmFtcGlhbiIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCgxMDgwMzIvIDEwKSwgd2VpZ2h0ID0gMSkgJT4lIA0KICAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtNC43MSwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNTcuMTIsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsdWUiLA0KICAgICAgICAgICAgICAgICAgIHBvcHVwPSJIaWdobGFuZCIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCg2MDQxMS8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0zLjA4Mzk5OTY2NCwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNTUuOTA1NDk2Mzc4LCANCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJibHVlIiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iTG90aGlhbiIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCgxODU1ODkJLyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTMuMCwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNTkuMCwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmx1ZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9Ik9ya25leSIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCgzMzc1LyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTEuMjY4OSwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNjAuMzAzOCwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmx1ZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IlNoZXRsYW5kIiwNCiAgICAgICAgICAgICAgICAgICByYWRpdXMgPSBzcXJ0KDMyNDgvIDEwKSwgd2VpZ2h0ID0gMSkgJT4lIA0KICAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtNy4wMiwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gIDU3Ljc2LCANCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJibHVlIiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iV2VzdGVybiBJc2xlcyIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCg1Mzk4LyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTMuMTk5OTk5MiwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gICAgNTYuMjQ5OTk5LCANCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJibHVlIiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iRmlmZSIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCg4NDEwMS8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0zLjczMzMzMDQsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU2LjY5OTk5NzIsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsdWUiLA0KICAgICAgICAgICAgICAgICAgIHBvcHVwPSJUYXlzaWRlIiwNCiAgICAgICAgICAgICAgICAgICByYWRpdXMgPSBzcXJ0KDEwNDIyNS8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC00LjQwNTcsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU1LjkwMTM3LCANCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJibHVlIiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iR3JlYXRlciBHbGFzZ293IGFuZCBDbHlkZSIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCgyNzMxODkJLyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTMuODMzMzMsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU1LjU4MzMzMSwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmx1ZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkxhbmFya3NoaXJlIiwNCiAgICAgICAgICAgICAgICAgICByYWRpdXMgPSBzcXJ0KDE0MzY0NAkvIDEwKSwgd2VpZ2h0ID0gMSkgDQoNCmBgYA0KDQpgYGB7cn0NCiNudW1iZXIgb2YgYWRtaXNzaW9ucyBhbW9uZyB0aGUgbW9zdCBkZXByaXZlZCBjb21tdW5pdGllcyANCmhiX3NpbWQgJT4lIA0KIGZpbHRlcihhZG1pc3Npb25fdHlwZSA9PSAiRW1lcmdlbmN5IiwgDQogICAgICAgIHNpbWRfcXVpbnRpbGUgPT0gIjEiKSAlPiUgDQoNCiAgDQpsZWFmbGV0KCkgJT4lIA0KICBhZGRUaWxlcygpICU+JSANCiAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtNC45NzUsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU1LjQ0NSwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAicmVkIiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iQXlyc2hpcmUgYW5kIEFycmFuIiwNCiAgICAgICAgICAgICAgICAgICByYWRpdXMgPSBzcXJ0KDk4MjAyLyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtMi44MzMzMzAwMCwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNTUuNTgzMzMwMDAsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gInJlZCIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkJvcmRlcnMiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoMjA2NTYvIDEwKSwgd2VpZ2h0ID0gMSkgJT4lIA0KICAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtMy44NTc3ODQsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU0Ljk4ODI4NSwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAicmVkIiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iRHVtZnJpZXMgYW5kIEdhbGxvd2F5IiwNCiAgICAgICAgICAgICAgICAgICByYWRpdXMgPSBzcXJ0KDMzOTgxLyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTMuNzg1MzUsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU2LjAwMjEsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gInJlZCIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkZvcnRoIFZhbGxleSIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCg2NDc1MC8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0yLjk4OCwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNTcuMjI4LCANCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJyZWQiLA0KICAgICAgICAgICAgICAgICAgIHBvcHVwPSJHcmFtcGlhbiIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCgxMDgwMzIvIDEwKSwgd2VpZ2h0ID0gMSkgJT4lIA0KICAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtNC43MSwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNTcuMTIsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gInJlZCIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkhpZ2hsYW5kIiwNCiAgICAgICAgICAgICAgICAgICByYWRpdXMgPSBzcXJ0KDYwNDExLyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTMuMDgzOTk5NjY0LCANCiAgICAgICAgICAgICAgICAgICBsYXQgPSA1NS45MDU0OTYzNzgsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gInJlZCIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkxvdGhpYW4iLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoMTg1NTg5CS8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0zLjAsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU5LjAsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gInJlZCIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9Ik9ya25leSIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCgzMzc1LyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTEuMjY4OSwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNjAuMzAzOCwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAicmVkIiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iU2hldGxhbmQiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoMzI0OC8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC03LjAyLCANCiAgICAgICAgICAgICAgICAgICBsYXQgPSAgNTcuNzYsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gInJlZCIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9Ildlc3Rlcm4gSXNsZXMiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoNTM5OC8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0zLjE5OTk5OTIsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9ICAgIDU2LjI0OTk5OSwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAicmVkIiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iRmlmZSIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCg4NDEwMS8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0zLjczMzMzMDQsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU2LjY5OTk5NzIsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gInJlZCIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IlRheXNpZGUiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoMTA0MjI1LyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTQuNDA1NywgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNTUuOTAxMzcsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gInJlZCIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkdyZWF0ZXIgR2xhc2dvdyBhbmQgQ2x5ZGUiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoMjczMTg5CS8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0zLjgzMzMzLCANCiAgICAgICAgICAgICAgICAgICBsYXQgPSA1NS41ODMzMzEsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gInJlZCIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkxhbmFya3NoaXJlIiwNCiAgICAgICAgICAgICAgICAgICByYWRpdXMgPSBzcXJ0KDE0MzY0NAkvIDEwKSwgd2VpZ2h0ID0gMSkgDQpgYGANCg0KYGBge3J9DQojI251bWJlciBvZiBhZG1pc3Npb25zIGFtb25nIHRoZSBzZWNvbmQgbW9zdCBkZXByaXZlZCBjb21tdW5pdGllcyANCmhiX3NpbWQgJT4lIA0KIGZpbHRlcihhZG1pc3Npb25fdHlwZSA9PSAiRW1lcmdlbmN5IiwgDQogICAgICAgIHNpbWRfcXVpbnRpbGUgPT0gIjIiKSAlPiUgDQoNCiAgDQpsZWFmbGV0KCkgJT4lIA0KICBhZGRUaWxlcygpICU+JSANCiAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtNC45NzUsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU1LjQ0NSwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAib3JhbmdlIiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iQXlyc2hpcmUgYW5kIEFycmFuIiwNCiAgICAgICAgICAgICAgICAgICByYWRpdXMgPSBzcXJ0KDk4MjAyLyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtMi44MzMzMzAwMCwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNTUuNTgzMzMwMDAsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIm9yYW5nZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkJvcmRlcnMiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoMjA2NTYvIDEwKSwgd2VpZ2h0ID0gMSkgJT4lIA0KICAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtMy44NTc3ODQsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU0Ljk4ODI4NSwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAib3JhbmdlIiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iRHVtZnJpZXMgYW5kIEdhbGxvd2F5IiwNCiAgICAgICAgICAgICAgICAgICByYWRpdXMgPSBzcXJ0KDMzOTgxLyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTMuNzg1MzUsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU2LjAwMjEsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIm9yYW5nZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkZvcnRoIFZhbGxleSIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCg2NDc1MC8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0yLjk4OCwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNTcuMjI4LCANCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJvcmFuZ2UiLA0KICAgICAgICAgICAgICAgICAgIHBvcHVwPSJHcmFtcGlhbiIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCgxMDgwMzIvIDEwKSwgd2VpZ2h0ID0gMSkgJT4lIA0KICAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtNC43MSwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNTcuMTIsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIm9yYW5nZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkhpZ2hsYW5kIiwNCiAgICAgICAgICAgICAgICAgICByYWRpdXMgPSBzcXJ0KDYwNDExLyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTMuMDgzOTk5NjY0LCANCiAgICAgICAgICAgICAgICAgICBsYXQgPSA1NS45MDU0OTYzNzgsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIm9yYW5nZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkxvdGhpYW4iLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoMTg1NTg5CS8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0zLjAsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU5LjAsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIm9yYW5nZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9Ik9ya25leSIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCgzMzc1LyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTEuMjY4OSwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNjAuMzAzOCwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAib3JhbmdlIiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iU2hldGxhbmQiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoMzI0OC8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC03LjAyLCANCiAgICAgICAgICAgICAgICAgICBsYXQgPSAgNTcuNzYsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIm9yYW5nZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9Ildlc3Rlcm4gSXNsZXMiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoNTM5OC8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0zLjE5OTk5OTIsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9ICAgIDU2LjI0OTk5OSwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAib3JhbmdlIiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iRmlmZSIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCg4NDEwMS8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0zLjczMzMzMDQsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU2LjY5OTk5NzIsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIm9yYW5nZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IlRheXNpZGUiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoMTA0MjI1LyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTQuNDA1NywgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNTUuOTAxMzcsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIm9yYW5nZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkdyZWF0ZXIgR2xhc2dvdyBhbmQgQ2x5ZGUiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoMjczMTg5CS8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0zLjgzMzMzLCANCiAgICAgICAgICAgICAgICAgICBsYXQgPSA1NS41ODMzMzEsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIm9yYW5nZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkxhbmFya3NoaXJlIiwNCiAgICAgICAgICAgICAgICAgICByYWRpdXMgPSBzcXJ0KDE0MzY0NAkvIDEwKSwgd2VpZ2h0ID0gMSkgDQpgYGANCg0KYGBge3J9DQojI251bWJlciBvZiBhZG1pc3Npb25zIGFtb25nIHRoZSAzcmQgbW9zdCBkZXByaXZlZCBjb21tdW5pdGllcyANCmhiX3NpbWQgJT4lIA0KIGZpbHRlcihhZG1pc3Npb25fdHlwZSA9PSAiRW1lcmdlbmN5IiwgDQogICAgICAgIHNpbWRfcXVpbnRpbGUgPT0gIjMiKSAlPiUgDQoNCiAgDQpsZWFmbGV0KCkgJT4lIA0KICBhZGRUaWxlcygpICU+JSANCiAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtNC45NzUsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU1LjQ0NSwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAiI2ZjOGQ1OSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkF5cnNoaXJlIGFuZCBBcnJhbiIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCg5ODIwMi8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTIuODMzMzMwMDAsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU1LjU4MzMzMDAwLCANCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICIjI2ZjOGQ1OSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkJvcmRlcnMiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoMjA2NTYvIDEwKSwgd2VpZ2h0ID0gMSkgJT4lIA0KICAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtMy44NTc3ODQsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU0Ljk4ODI4NSwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAiIyNmYzhkNTkiLA0KICAgICAgICAgICAgICAgICAgIHBvcHVwPSJEdW1mcmllcyBhbmQgR2FsbG93YXkiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoMzM5ODEvIDEwKSwgd2VpZ2h0ID0gMSkgJT4lIA0KICAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtMy43ODUzNSwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNTYuMDAyMSwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAiI2ZjOGQ1OSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkZvcnRoIFZhbGxleSIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCg2NDc1MC8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0yLjk4OCwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNTcuMjI4LCANCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICIjZmM4ZDU5IiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iR3JhbXBpYW4iLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoMTA4MDMyLyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTQuNzEsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU3LjEyLCANCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICIjZmM4ZDU5IiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iSGlnaGxhbmQiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoNjA0MTEvIDEwKSwgd2VpZ2h0ID0gMSkgJT4lIA0KICAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtMy4wODM5OTk2NjQsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU1LjkwNTQ5NjM3OCwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAiI2ZjOGQ1OSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkxvdGhpYW4iLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoMTg1NTg5CS8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0zLjAsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU5LjAsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIiNmYzhkNTkiLA0KICAgICAgICAgICAgICAgICAgIHBvcHVwPSJPcmtuZXkiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoMzM3NS8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0xLjI2ODksIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDYwLjMwMzgsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIiNmYzhkNTkiLA0KICAgICAgICAgICAgICAgICAgIHBvcHVwPSJTaGV0bGFuZCIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCgzMjQ4LyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTcuMDIsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9ICA1Ny43NiwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAiI2ZjOGQ1OSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9Ildlc3Rlcm4gSXNsZXMiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoNTM5OC8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0zLjE5OTk5OTIsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9ICAgIDU2LjI0OTk5OSwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAiI2ZjOGQ1OSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkZpZmUiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoODQxMDEvIDEwKSwgd2VpZ2h0ID0gMSkgJT4lIA0KICAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtMy43MzMzMzA0LCANCiAgICAgICAgICAgICAgICAgICBsYXQgPSA1Ni42OTk5OTcyLCANCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICIjZmM4ZDU5IiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iVGF5c2lkZSIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCgxMDQyMjUvIDEwKSwgd2VpZ2h0ID0gMSkgJT4lIA0KICAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtNC40MDU3LCANCiAgICAgICAgICAgICAgICAgICBsYXQgPSA1NS45MDEzNywgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAiI2ZjOGQ1OSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkdyZWF0ZXIgR2xhc2dvdyBhbmQgQ2x5ZGUiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoMjczMTg5CS8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0zLjgzMzMzLCANCiAgICAgICAgICAgICAgICAgICBsYXQgPSA1NS41ODMzMzEsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIiNmYzhkNTkiLA0KICAgICAgICAgICAgICAgICAgIHBvcHVwPSJMYW5hcmtzaGlyZSIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCgxNDM2NDQJLyAxMCksIHdlaWdodCA9IDEpIA0KYGBgDQoNCmBgYHtyfQ0KIyMjbnVtYmVyIG9mIGFkbWlzc2lvbnMgYW1vbmcgdGhlIHRoZSAybmQgbGVhc3QgZGVwcml2ZWQgY29tbXVuaXRpZXMgDQpoYl9zaW1kICU+JSANCiBmaWx0ZXIoYWRtaXNzaW9uX3R5cGUgPT0gIkVtZXJnZW5jeSIsIA0KICAgICAgICBzaW1kX3F1aW50aWxlID09ICI0IikgJT4lIA0KDQogIA0KbGVhZmxldCgpICU+JSANCiAgYWRkVGlsZXMoKSAlPiUgDQogIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTQuOTc1LCANCiAgICAgICAgICAgICAgICAgICBsYXQgPSA1NS40NDUsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsdWUiLA0KICAgICAgICAgICAgICAgICAgIHBvcHVwPSJBeXJzaGlyZSBhbmQgQXJyYW4iLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoOTgyMDIvIDEwKSwgd2VpZ2h0ID0gMSkgJT4lIA0KICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0yLjgzMzMzMDAwLCANCiAgICAgICAgICAgICAgICAgICBsYXQgPSA1NS41ODMzMzAwMCwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmx1ZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkJvcmRlcnMiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoMjA2NTYvIDEwKSwgd2VpZ2h0ID0gMSkgJT4lIA0KICAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtMy44NTc3ODQsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU0Ljk4ODI4NSwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmx1ZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkR1bWZyaWVzIGFuZCBHYWxsb3dheSIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCgzMzk4MS8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0zLjc4NTM1LCANCiAgICAgICAgICAgICAgICAgICBsYXQgPSA1Ni4wMDIxLCANCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJibHVlIiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iRm9ydGggVmFsbGV5IiwNCiAgICAgICAgICAgICAgICAgICByYWRpdXMgPSBzcXJ0KDY0NzUwLyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTIuOTg4LCANCiAgICAgICAgICAgICAgICAgICBsYXQgPSA1Ny4yMjgsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsdWUiLA0KICAgICAgICAgICAgICAgICAgIHBvcHVwPSJHcmFtcGlhbiIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCgxMDgwMzIvIDEwKSwgd2VpZ2h0ID0gMSkgJT4lIA0KICAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtNC43MSwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNTcuMTIsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsdWUiLA0KICAgICAgICAgICAgICAgICAgIHBvcHVwPSJIaWdobGFuZCIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCg2MDQxMS8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0zLjA4Mzk5OTY2NCwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNTUuOTA1NDk2Mzc4LCANCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJibHVlIiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iTG90aGlhbiIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCgxODU1ODkJLyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTMuMCwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNTkuMCwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmx1ZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9Ik9ya25leSIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCgzMzc1LyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTEuMjY4OSwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNjAuMzAzOCwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmx1ZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IlNoZXRsYW5kIiwNCiAgICAgICAgICAgICAgICAgICByYWRpdXMgPSBzcXJ0KDMyNDgvIDEwKSwgd2VpZ2h0ID0gMSkgJT4lIA0KICAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtNy4wMiwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gIDU3Ljc2LCANCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJibHVlIiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iV2VzdGVybiBJc2xlcyIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCg1Mzk4LyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTMuMTk5OTk5MiwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gICAgNTYuMjQ5OTk5LCANCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJibHVlIiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iRmlmZSIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCg4NDEwMS8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0zLjczMzMzMDQsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU2LjY5OTk5NzIsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsdWUiLA0KICAgICAgICAgICAgICAgICAgIHBvcHVwPSJUYXlzaWRlIiwNCiAgICAgICAgICAgICAgICAgICByYWRpdXMgPSBzcXJ0KDEwNDIyNS8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC00LjQwNTcsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU1LjkwMTM3LCANCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJibHVlIiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iR3JlYXRlciBHbGFzZ293IGFuZCBDbHlkZSIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCgyNzMxODkJLyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTMuODMzMzMsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU1LjU4MzMzMSwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmx1ZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkxhbmFya3NoaXJlIiwNCiAgICAgICAgICAgICAgICAgICByYWRpdXMgPSBzcXJ0KDE0MzY0NAkvIDEwKSwgd2VpZ2h0ID0gMSkgDQpgYGANCg0KYGBge3J9DQojIyMjbnVtYmVyIG9mIGFkbWlzc2lvbnMgYW1vbmcgdGhlIHRoZSBsZWFzdCBkZXByaXZlZCBjb21tdW5pdGllcyANCmhiX3NpbWQgJT4lIA0KIGZpbHRlcihhZG1pc3Npb25fdHlwZSA9PSAiRW1lcmdlbmN5IiwgDQogICAgICAgIHNpbWRfcXVpbnRpbGUgPT0gIjUiKSAlPiUgDQoNCiAgDQpsZWFmbGV0KCkgJT4lIA0KICBhZGRUaWxlcygpICU+JSANCiAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtNC45NzUsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU1LjQ0NSwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAicHVycGxlIiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iQXlyc2hpcmUgYW5kIEFycmFuIiwNCiAgICAgICAgICAgICAgICAgICByYWRpdXMgPSBzcXJ0KDk4MjAyLyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtMi44MzMzMzAwMCwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNTUuNTgzMzMwMDAsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gInB1cnBsZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkJvcmRlcnMiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoMjA2NTYvIDEwKSwgd2VpZ2h0ID0gMSkgJT4lIA0KICAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtMy44NTc3ODQsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU0Ljk4ODI4NSwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAicHVycGxlIiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iRHVtZnJpZXMgYW5kIEdhbGxvd2F5IiwNCiAgICAgICAgICAgICAgICAgICByYWRpdXMgPSBzcXJ0KDMzOTgxLyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTMuNzg1MzUsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU2LjAwMjEsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gInB1cnBsZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkZvcnRoIFZhbGxleSIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCg2NDc1MC8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0yLjk4OCwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNTcuMjI4LCANCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJwdXJwbGUiLA0KICAgICAgICAgICAgICAgICAgIHBvcHVwPSJHcmFtcGlhbiIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCgxMDgwMzIvIDEwKSwgd2VpZ2h0ID0gMSkgJT4lIA0KICAgYWRkQ2lyY2xlTWFya2VycyhsbmcgPSAtNC43MSwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNTcuMTIsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gInB1cnBsZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkhpZ2hsYW5kIiwNCiAgICAgICAgICAgICAgICAgICByYWRpdXMgPSBzcXJ0KDYwNDExLyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTMuMDgzOTk5NjY0LCANCiAgICAgICAgICAgICAgICAgICBsYXQgPSA1NS45MDU0OTYzNzgsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gInB1cnBsZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkxvdGhpYW4iLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoMTg1NTg5CS8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0zLjAsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU5LjAsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gInB1cnBsZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9Ik9ya25leSIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCgzMzc1LyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTEuMjY4OSwgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNjAuMzAzOCwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAicHVycGxlIiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iU2hldGxhbmQiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoMzI0OC8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC03LjAyLCANCiAgICAgICAgICAgICAgICAgICBsYXQgPSAgNTcuNzYsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gInB1cnBsZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9Ildlc3Rlcm4gSXNsZXMiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoNTM5OC8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0zLjE5OTk5OTIsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9ICAgIDU2LjI0OTk5OSwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAicHVycGxlIiwNCiAgICAgICAgICAgICAgICAgICBwb3B1cD0iRmlmZSIsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gc3FydCg4NDEwMS8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0zLjczMzMzMDQsIA0KICAgICAgICAgICAgICAgICAgIGxhdCA9IDU2LjY5OTk5NzIsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gInB1cnBsZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IlRheXNpZGUiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoMTA0MjI1LyAxMCksIHdlaWdodCA9IDEpICU+JSANCiAgIGFkZENpcmNsZU1hcmtlcnMobG5nID0gLTQuNDA1NywgDQogICAgICAgICAgICAgICAgICAgbGF0ID0gNTUuOTAxMzcsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gInB1cnBsZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkdyZWF0ZXIgR2xhc2dvdyBhbmQgQ2x5ZGUiLA0KICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNxcnQoMjczMTg5CS8gMTApLCB3ZWlnaHQgPSAxKSAlPiUgDQogICBhZGRDaXJjbGVNYXJrZXJzKGxuZyA9IC0zLjgzMzMzLCANCiAgICAgICAgICAgICAgICAgICBsYXQgPSA1NS41ODMzMzEsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gInB1cnBsZSIsDQogICAgICAgICAgICAgICAgICAgcG9wdXA9IkxhbmFya3NoaXJlIiwNCiAgICAgICAgICAgICAgICAgICByYWRpdXMgPSBzcXJ0KDE0MzY0NAkvIDEwKSwgd2VpZ2h0ID0gMSkgDQpgYGANCg0KDQpgYGB7cn0NCnNpbWRfcXVpbnRpbGUgIDwtIGFzLmRhdGEuZnJhbWUoaGJfc2ltZCRzaW1kX3F1aW50aWxlKQ0KYGBgDQoNCmBgYHtyfQ0KDQpoYl9zaW1kJHNpbWRfcXVpbnRpbGUgPC0gZmFjdG9yKGhiX3NpbWQkc2ltZF9xdWludGlsZSwgbGV2ZWxzID0gYygiMSIsICIyIiwgIjMiLCAiNCIsICI1IikpDQpoYl9zaW1kDQpgYGANCg0KDQoNCmBgYHtyfQ0KbGlicmFyeShwbG90bHkpDQpgYGANCg0KYGBge3J9DQpsaWJyYXJ5KHBsb3RseSkNCmhiX3NpbWQkc2ltZF9xdWludGlsZSA8LSBmYWN0b3IoaGJfc2ltZCRzaW1kX3F1aW50aWxlLCBsZXZlbHMgPSBjKCIxIiwgIjIiLCAiMyIsICI0IiwgIjUiKSkNCmhiX3NpbWQNCiNtZWFuIGFkbWlzc2lvbnMgcGVyIFNJTUQgZnJvbSAyMDIwIHRvIDIwMjINCnAyIDwtIGhiX3NpbWQgJT4lIA0KICAgZmlsdGVyKGFkbWlzc2lvbl90eXBlID09ICJFbWVyZ2VuY3kiLA0KICAgICAgICAgICMgaGJfbmFtZSByZWFjdGl2ZQ0KICAgICAgICAgIGhiX25hbWUgPT0gIlNjb3RsYW5kIiklPiUgDQogIGdyb3VwX2J5KGhiX25hbWUsIHdlZWtfZW5kaW5nLCBzaW1kX3F1aW50aWxlLCB5ZWFyKSAlPiUgDQogIHN1bW1hcmlzZShtZWFuX2FkbWlzc2lvbnMgPSBtZWFuKG51bWJlcl9hZG1pc3Npb25zKSwNCiAgICAgICAgICAgIG1lYW5fMjAxODIwMTlfYWRtaXNzaW9ucyA9IG1lYW4oYXZlcmFnZTIwMTgyMDE5KSkgJT4lIA0KICANCiAgZ2dwbG90KCkrDQogIGdlb21fcG9pbnQoYWVzKHggPSB3ZWVrX2VuZGluZywgDQogICAgICAgICAgICAgICAgICB5ID0gbWVhbl9hZG1pc3Npb25zLCBjb2xvdXIgPSBzaW1kX3F1aW50aWxlLCANCiAgICAgICAgICAgICAgICAgdGV4dCA9IHBhc3RlMCgiRGF0ZTogIiwgd2Vla19lbmRpbmcsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8YnI+IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWVhbiBhZG1pc3Npb25zOiAiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kKG1lYW5fYWRtaXNzaW9ucywgZGlnaXRzID0gMiksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxicj4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTgtMjAxOSBtZWFuIGFkbWlzc2lvbnM6ICIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmQobWVhbl8yMDE4MjAxOV9hZG1pc3Npb25zLCBkaWdpdHMgPSAyKSkpKSArDQogIA0KICBnZW9tX2xpbmUoYWVzKHggPSB3ZWVrX2VuZGluZywNCiAgICAgICAgICAgICAgICAgeSA9IG1lYW5fYWRtaXNzaW9ucywNCiAgICAgICAgICAgICAgICBjb2xvdXIgPSBzaW1kX3F1aW50aWxlLA0KICAgICAgICAgICAgICAgIGdyb3VwID0gc2ltZF9xdWludGlsZSkpICsNCiAgc2NhbGVfeF9kYXRlKGRhdGVfYnJlYWtzID0gIjMgbW9udGhzIiwgZGF0ZV9sYWJlbHMgPSAiJWIgJVkiKSArDQogIHNjYWxlX3lfc3FydCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCBzaXplID03KSkgKw0KICAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gYXMubnVtZXJpYyhhcy5EYXRlKCIyMDIwLTAxLTAxIikpLCBsaW5ldHlwZT00LCBjb2xvdXIgPSAiZ3JleTUwIikrDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IGFzLm51bWVyaWMoYXMuRGF0ZSgiMjAyMS0wMS0wMSIpKSwgbGluZXR5cGU9NCwgY29sb3VyID0gImdyZXk1MCIpKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSBhcy5udW1lcmljKGFzLkRhdGUoIjIwMjItMDEtMDEiKSksIGxpbmV0eXBlPTQsIGNvbG91ciA9ICJncmV5NTAiKSsNCiAgbGFicyh0aXRsZSA9ICJNZWFuIGFkbWlzc2lvbnMgcGVyIFNJTUQgXG4iLA0KICAgICAgIHggPSAiRGF0ZSIsDQogICAgICAgeSA9ICJNZWFuIGFkbWlzc2lvbnMiLA0KICAgICAgIGNvbG91ciA9ICJTSU1EIikNCg0KDQpwMiAlPiUgDQogIGdncGxvdGx5KHRvb2x0aXAgPSAidGV4dCIpICU+JSANCiAgY29uZmlnKGRpc3BsYXlNb2RlQmFyID0gRkFMU0UpDQpgYGA=